#ifndef INSTRUCTION_HPP_
#define INSTRUCTION_HPP_

#include "Operand.hpp"
#include "3adCode.hpp"
#include "IdentTable.hpp"

class Instruction {

private:
	int identLabel;
	CodeInstruction opCode;
	Operand * operands[3]; //ou vector ? (on utilisera 0 à 3 opérandes selon l'opcode)

public:

	Instruction(CodeInstruction opCode);

	/**
	 * Constructs a standard instruction with the supplied opCode and operands
	 * The instruction will have no label
	 * @param opCode
	 * @param operand
	 */
	Instruction(CodeInstruction opCode, Operand * operand1);

	Instruction(CodeInstruction opCode, Operand * operand1, Operand * operand2);

	Instruction(CodeInstruction opCode, Operand * operand1, Operand * operand2, Operand * operand3);

	Instruction(CodeInstruction opCode, Operand operands[], int identLabel);
	virtual ~Instruction();


	void show(IdentTable * identTable);

};

#endif /* INSTRUCTION_HPP_ */
